#include<stdio.h>
#include<stdlib.h>
typedef struct node{
    int data;
    struct node* next;
}Node;
Node* Create_List();
void insert_bysize(Node* head,int data);
void delet_bycompare(Node* head,int minsize);
void combine_List(Node* head_mas,Node* head_sub);
void display_List(Node* head);
int isempty(Node* head);
void delete_mem(Node* head,int data);
int main(){
  // Node* head=Create_List();  
//    while(1){
//     int n;
//     printf("请输入要插入链表中的值(输入-1结束输入): ");
//     scanf("%d",&n);
//     if(n==-1){
//         break;
//     }
//     insert_bysize(head,n);

//    }
  
//    display_List(head);
//    printf("这里指定链表中的最小元素为3,则链表元素如下\n");
//    delet_bycompare(head,3);
//    display_List(head);
//上述功能测试完成
//合并链表
Node* head_mas=Create_List();
while(1){
    printf("请输入链表head_mas中的元素(输入-1结束): ");
    int n;
    scanf("%d",&n);
    if(n==-1){
        break;
    }
    insert_bysize(head_mas,n);
}
Node* head_sub=Create_List();
while(1){
    printf("请输入链表head_sub中的元素(输入-1结束): ");
    int n;
    scanf("%d",&n);
    if(n==-1){
        break;
    }
    insert_bysize(head_sub,n);
}
printf("head_mas中的元素为:\n");
display_List(head_mas);
printf("\nhead_sub中的元素为:\n");
display_List(head_sub);
combine_List(head_mas,head_sub);
printf("合并后链表中的元素为\n");
display_List(head_mas);
    return 0;
}
Node* Create_List(){
    Node* head=(Node*)malloc(sizeof(Node));
    head->data=0;
    head->next=NULL;
}
int isempty(Node* head){
    if(head->data==0&&head->next==NULL){
        return 1;
    }
    return 0;
}
void display_List(Node* head){
    
    printf("\n链表中的元素个数为:%d\n",head->data);
    if(isempty(head)==1){
        printf("链表为空\n");
    }
    else{ Node* pstr=head->next;
    for(;pstr!=NULL;pstr=pstr->next){
        printf(pstr==head->next?"%d":"->%d",pstr->data);
    }
    }
}
void insert_bysize(Node* head,int data){
    Node* pnew=(Node*)malloc(sizeof(Node));
    pnew->data=data;
    if(isempty(head)==1){
    head->next=pnew;
    pnew->next=NULL;
    }
    else{
       if(head->next->data>data){
        pnew->next=head->next;
        head->next=pnew;
        
       }
       else{ 
        Node*  pstr=head->next;
        int Flags=0;
        for(;pstr->next!=NULL;pstr=pstr->next){
            if(pstr->data<=data&&(pstr->next->data)>=data){
                pnew->next=pstr->next;
                pstr->next=pnew;
                Flags=1;
                break;
            }
        }
        if(Flags==0){
            pstr->next=pnew;
            pnew->next=NULL;
        }
    }
}
    head->data++;
}

void delete_mem(Node* head,int data){
    Node* pstr=head;
    if(isempty(head)==1){
        printf("链表为空\n");
    }
    else{
        int Flags=0;
        for(;pstr->next->next!=NULL;pstr=pstr->next){
        if(pstr->next->data==data){
            Node* temp=pstr->next;
            pstr->next=temp->next;
            Flags=1;
            head->data--;
            break;

        }
    }
    if(Flags==0&&pstr->next->data!=data){
        printf("链表元素不存在\n");
    }
    else if(Flags==0&&pstr->next->data==data){
        pstr->next=NULL;
        head->data--;
    }

}
}
void delet_bycompare(Node* head,int minsize){
    if(isempty(head)){
        printf("链表为空，删除失败\n");
    }
    else{
        Node* pstr=head->next;
        for(;pstr!=NULL;pstr=pstr->next){
            if(pstr->data<minsize){
                delete_mem(head,pstr->data);
            }
        }
    }
}
void combine_List(Node* head_mas,Node* head_sub){
    Node* pstr=head_sub->next;
    for(;pstr!=NULL;pstr=pstr->next){
        insert_bysize(head_mas,pstr->data);
    }
}
